我是一个交换机,集线器你一边呆着去!
集线器的统治
集线器(Hub)这个“笨蛋”统治我们的局域网已经有好几年了,我们都敢怒而不敢言。
集线器之所以能控制我们这几台电脑, 是因为从我们的网卡扯出的网线都会连接到它的身上,他把这些连接点叫做端口;
我们想和别人通讯,必须要通过这些集线器的端口发送数据,然后由集线器来转发。
比如某一天,我(PC1)想和PC4聊聊天,发送了一个数据包给集线器,照理说集线器应该把这个数据包转发给PC4吧!
不是这样的!这个笨蛋仅仅知道它的端口是否连上了设备,至于设备是谁,他根本不管!
那他怎么发送数据?
简单而粗暴!他把数据包向所有的端口都转发了一遍,这样PC2, PC3, PC4都会收到。
但是我们这些电脑约定好了, 只要不是发给你的数据包,简单就丢弃就行。
所以PC2, PC3就需要检查一下数据包中的目标MAC地址(这是唯一能标志我们电脑网卡的东西),看看是不是自己,不是的话就简单丢弃。
这是一种效率挺低的办法,集线器得意的把它成为“广播”。
后来我们几台电脑发现了集线器的秘密,实际上它根本不懂得网络协议这一套东西,它不懂得MAC地址,IP地址,数据帧,IP包,对它来说,就是0和1这样的二进制流。
当表示0或者1的bit到达一个端口时,集线器会重新生成这个bit,将其能量强度放大,并将该bit从其他端口传输出去。仅此而已,它是个典型的物理层设备。
我们这些支持TCP/IP的电脑居然被这么一个笨家伙给统治了,真是可悲。
广播的方式在网络中电脑很少的情况下勉强凑合,但是随着联网的电脑越来越多,不幸的事情就发生了。
想象一下,PC1向PC4发送数据,与此同时, PC2也要向PC3发送数据, 网络上就出现了广播的冲突。
为了解决这个问题,我们只好再次约定,如果出现了冲突,每个电脑都要等待一段随机的时间,然后再尝试发送。
我们几个决定推翻他的统治,想来想去,也只有罢工这一条路。
主人发现网络不通了,仔细检查了电脑,我们都表现得很正常,于是怀疑的矛头就被指向了笨蛋集线器, 主人把他换掉了。
一个新的设备在我们的欢呼声中入住局域网。
我是交换机
我听到了咔嗒咔嗒的声音,意识到我的那些端口应该被连接上了网线,网线的那头儿就是电脑。
我立刻感到了不同寻常的气氛,这些电脑对我的到来简直是兴奋得过了头。
根据我的经验,他们这是深受集线器统治之苦。
这不,一个数据包马上就从我的端口1 发了过来。
我一看源地址是MAC_PC1,立刻就在我的MAC地址表中记了一笔:端口1 <--> MAC_PC1
这样,下一次如果有电脑发送数据包给MAC_PC1的话,我就知道直接转发到端口1就行了,那里肯定连着PC1
但是目前这个数据包的目标地址MAC_PC4,我不知道是在那个端口,按照规定,只好广播到所有端口了!
我似乎感受到了有两个电脑在抱怨:“这不是发给我的,真烦人,丢弃!这新来的家伙也没什么本事嘛!还是广播!”
我隐忍不发,过了一会儿,PC4向端口4发了一个数据包:
我立刻更新我的MAC地址表,记录下端口4上连着PC4。
这个数据包是发给MAC_PC1的,之前我已经得知端口1上连接着PC1, 就可以直接转发过去了,不用再广播了!
不久以后,我就得知了每个端口都和谁相连, 我就可以精确地向特定目的地转发数据包了。
这一天,我偷偷地拆开了他们之间通信的几个数据包(这是严重违反规定的!我只能查看数据链路层的东西),发现他们几个有趣的通信:
PC1 : 我觉得新来的家伙不错啊,现在发数据快多了啊。
PC2 : 是啊是啊,关键是冲突很少了,这家伙似乎可以准确地把数据转发到目的地。
PC1: 他是怎么做到的?
PC2: 肯定是记录下了端口和设备的关系
PC1: 嗯,他也没问我们要啊。
PC2: 肯定是自己学习的,没想到还挺智能的嘛,哈哈。
PC3:我们几个整天在这个小局域网内转悠,我听说外边的互联网非常精彩啊,要不去看看?
PC4: 怎么才能去到互联网?
......
到底怎么才能连上互联网? 请移步《我是一个网卡》